/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package practica1.ui;

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import practica1.controller.Controller;
import practica1.controller.event.ControllerPoblacionEvent;
import practica1.controller.listener.ControllerPoblacionListener;
import practica1.logic.LogicPoblacion;
import practica1.logic.event.LogicPoblacionEvent;
import practica1.logic.listener.LogicPoblacionListener;
import practica1.ui.panelPoblacion.PanelPoblacion;

/**
 * Componente que permite visualizar en una nueva ventana una población
 * @author Miguel González - Ceura
 */
public class VentanaMostrarPoblacion extends JFrame {
    private LogicPoblacion poblacion;
    
    /**
     * Constructor de la ventana que muestra una nueva población y se pone
     * visible por defecto
     * @param poblacion LogicPoblacion Población a visualizar
     */
    public VentanaMostrarPoblacion(LogicPoblacion poblacion) {
        super(poblacion.getExperimentoPadre().getNombreExperimento()
                + " - " + poblacion.getNombrePoblacion());
        
        this.poblacion = poblacion;
        
        init();
        
        initListeners();
    }
    
    /**
     * Inicializa los componentes Swings
     */
    private void init() {
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        setBounds(100, 100, 600, 500);
        
        PanelPoblacion panelPob = new PanelPoblacion(poblacion);
        contentPane.add(panelPob, BorderLayout.CENTER);
        setVisible(true);
        
    }
    
    /**
     * Inicializa los listeners
     */
    private void initListeners() {
        poblacion.addLogicPoblacionListener(new LogicPoblacionListener() {
            /**
             * Cuando la población cambia actualizamos el nombre de la ventana
             * por si el nombre de la población ha cambiado
             */
            @Override
            public void poblacionChange(LogicPoblacionEvent event) {
                setName(poblacion.getExperimentoPadre().getNombreExperimento()
                + " - " + poblacion.getNombrePoblacion());
            }
        });
        
        Controller.getInstance().addControllerPoblacionListener(
                new ControllerPoblacionListener() {

            @Override
            public void addedPoblacion(ControllerPoblacionEvent event) {}

            @Override
            public void removedPoblacion(ControllerPoblacionEvent event) {
                //Si se ha borrado la población que estramos mostrando ocultamos
                //la ventana
                if(event.getPoblacion().equals(poblacion)) {
                    setVisible(false);
                }
            }

            @Override
            public void modifiedPoblacion(ControllerPoblacionEvent event) {}

            @Override
            public void abiertaPoblacion(ControllerPoblacionEvent event) {}

            @Override
            public void cerradaPoblacion(ControllerPoblacionEvent event) {}

            @Override
            public void mostrarPoblacion(ControllerPoblacionEvent event) {}            
        });
    }
}
